클래스의 다형성
✒️ 2025-05-23 16:59 내용 수정
다형성
하나의 객체가 여러 가지 타입을 가질 수 있는 것
- 상세 내용은 Java의 다형성과 타입 변환 참고.
- 완벽한 다형성 구현 : 상속 + 메소드 오버라이딩 + 클래스 타입 변환
상속
- Java의 상속과 마찬가지로 Javascript의 클래스도 상속이 가능하다
- 상속(Inheritance) 참고.
extends키워드를 사용하여 상속 받는다.- 부모 클래스를 호출할 때
super키워드를 사용하며, 부모 생성자를 호출할 때super()키워드를 사용한다. - 생성자가 없는 클래스를 상속 받으려면
Object.setPrototypeOf(ClassName.prototype, ParentClass)메소드를 사용해야 한다.
class Parent {
constructor(field1, field2) {
this.field1 = field1;
this.field2 = field2;
}
fn() {
console.log('hi');
}
}
class Child extends Parent{
constructor(field1, field2, field3) {
super(field1, field2); // 부모 생성자 호출
this.field3 = field3;
}
fn() {
super.fn(); // 부모 클래스의 fn() 호출
console.log('hello');
}
}
오버라이딩
- Java의 오버라이딩처럼 상속 관계일 때 부모 클래스의 메소드를 오버라이딩을 통해 재정의할 수 있다.
- Java와는 다르게 오버라이딩 Annotation이 필요하지 않으며, 같은 이름의 함수의 실행문을 수정하면 된다.
class Parent {
constructor(field1, field2) {
this.field1 = field1;
this.field2 = field2;
}
fn() {
console.log('hi');
}
}
class Child extends Parent{
constructor(field1, field2, field3) {
super(field1, field2); // 부모 생성자 호출
this.field3 = field3;
}
fn() {
console.log('hello'); // 오버라이딩을 통한 함수 재정의
}
}